// 此文件作为Generator的核心入口
// 需要导出一个继承自 Yeoman Generator 的类型
// Yeoman Generator 在工作时候会自动调用我们在此类型中定义的一些生命周期方法
// 我们在这些方法中可以通过调用父类提供的一些工具方法实现一些功能，不如文件写入

const Generator = require('yeoman-generator')

module.exports - class extends Generator{
    constructor(args, opts) {
        super(args, opts)
    }
    prompting() {
        // Yeoman 在询问用户环节会自动调用此方法
        // 在此方法中可以调用父类的 prompt() 方法发出对用户的命令行询问
        return this.prompt({
            type: 'input',
            name: 'name',
            message: 'Your project name',
            default: this.appname // appname 为项目生成目录名称
        })
        .then(answers => {
            // answers => { name: 'user input value' }
            this.answers = answers
        })
    }
    writing() {
        // Yeoman自动在生成文件阶段调用此方法
        // 我们这里尝试往项目目录中写入文件
        // this.fs.write(
        //     this.destinationPath('temp.txt'),
        //     Math.random().toString()
        // )
        // 通过模板方式写入文件到目录文件
        
        // 模板文件路径
        const tmp1 = this.destinationPath('temp.txt')
        // 输出目标路径
        const output = this.destinationPath('foo.txt')
        // 模板数据上下问
        // const context = { title: 'Hello lyj~', success: false}
        const context = this.answers

        this.fs.copyTpl(tmp1, output, context)
    }
}